package com.wuxinwudai.android.util;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.telephony.TelephonyManager;

import java.util.List;

/**
 * SystemUtils 类提供系统工具功能
 * @author 吾心无待 于2016年04月10日
 */
public class SystemUtils {

    /**
     * 判断进程是否存在
     * @param context 上下文对象
     * @param processName 进程名称
     * @return 是否存在
     */
    public static boolean isNamedProcess(Context context, String processName) {
        if (context == null) {
            return false;
        }
        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> processInfoList = manager.getRunningAppProcesses();
        if (processInfoList == null) {
            return true;
        }
        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == pid && processName.equals(processInfo.processName)) {
                return true;
            }
        }
        return false;
    }

       /**
    * 判断应用是否为后台应用
    * @param context
    * @return
    */
    public static boolean isApplicationInBackground(Context context) throws SecurityException {
        ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        @SuppressWarnings("deprecation")
		List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1);
        if (taskList != null && !taskList.isEmpty()) {
            ComponentName topActivity = taskList.get(0).topActivity;
            if (topActivity != null && !topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }
        return false;
    }

    /**
     * 获取默认线程池大小
     * @return 默认线程池大小
     */
    public static int getDefaultThreadPoolSize() {
        return getDefaultThreadPoolSize(8);
    }

    /**
     * 获取可用线程池大小，否则返回 max 值
     * @param max 设置线程池最大值
     * @return 当线程池大小大于 max 值返回线程池默认大小，否则返回 max 值
     */
    public static int getDefaultThreadPoolSize(int max) {
        int availableProcessors = 2 * Runtime.getRuntime().availableProcessors() + 1;
        return availableProcessors > max ? max : availableProcessors;
    }

    /**
     * 获取手机号码（默认手机卡号码）
     * @param context 上下文对象
     * @return 手机号码
     */
    public static String getPhoneNumber(Context context){
        // 创建电话管理
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        // 获取手机号码
        String line1Number = tm.getLine1Number();
        if (line1Number == null) {
            line1Number = "";
        }
        return line1Number;
    }

    /**
     * 获取当前应用在系统上的缓存
     * @param context 上下文对象
     * @return 系统上缓存大小
     */
    public static long getSystemCache(Context context){
        long len = FileUtils.getDirLength(context.getCacheDir());
        if (FileUtils.hasSDCard()){
            len += FileUtils.getDirLength(context.getExternalCacheDir());
        }
        return len;
    }

    /**
     * 清除当前应用在系统上的缓存
     * @param context 清除系统上的缓存
     */
    public static void clearSystemCache(Context context){
        FileUtils.deleteDir(context.getCacheDir());
        if (FileUtils.hasSDCard()){
            FileUtils.deleteDir(context.getExternalCacheDir());
        }
    }


}
